home *** CD-ROM | disk | FTP | other *** search
/ Macworld Expo - Develope…Central & Net Innovations / Developer Central and Net Innovators (MacWorld Expo) (January 1999).iso / Developer Central / Bowers Development / Demo AppMaker / Examples / PowerPlant / Gadgets / CButtons.cp < prev    next >
Encoding:
Text File  |  1998-10-11  |  5.1 KB  |  234 lines  |  [TEXT/CWIE]

  1. // CButtons.cp -- window methods
  2.  
  3. #include "CButtons.h"
  4.  
  5. #include <UEnvironment.h>
  6. #include <UReanimator.h>
  7. #include <URegistrar.h>
  8. #include <LStream.h>
  9. #include <LTabGroup.h>
  10. #include <LStaticText.h>
  11. #include <LAMStaticTextImp.h>
  12. #include <LGAStaticTextImp.h>
  13. #include <CInvisibleButton.h>
  14. #include <LPushButton.h>
  15. #include <LAMPushButtonImp.h>
  16. #include <LGAPushButtonImp.h>
  17. #include <LBevelButton.h>
  18. #include <LAMBevelButtonImp.h>
  19. #include <LGABevelButtonImp.h>
  20. #include <LDisclosureTriangle.h>
  21. #include <LAMControlImp.h>
  22. #include <LGADisclosureTriangleImp.h>
  23. #include <CustomControls.h>
  24. #include <LToggleButton.h>
  25. #include <LTextGroupBox.h>
  26. #include <LAMControlViewImp.h>
  27. #include <LGATextGroupBoxImp.h>
  28. #include <LRadioGroupView.h>
  29. #include <LRadioButton.h>
  30. #include <LGARadioButtonImp.h>
  31. #include <CTextUtils.h>
  32.  
  33. #include "DDocData.h"
  34. #include "GadgetsCmds.h"
  35.  
  36. const MessageT    msgXx    = 'Xx  ';
  37. const MessageT    msgLeftRight    = 'Left';
  38.  
  39. #define PPob_ButtonsID    201
  40. #define RidL_ButtonsID    201
  41.  
  42. Boolean        CButtons::sIsRegistered = false;
  43.  
  44. //----------
  45. CButtons*        CButtons::CreateButtons (
  46.     LCommander*        inSuperCommander,
  47.     DDocData*        inData)
  48. {
  49.     if (!sIsRegistered) {
  50.         RegisterClass ();
  51.     }
  52.  
  53.     CButtons*        window;
  54.     window = (CButtons *)LWindow::CreateWindow(PPob_ButtonsID, inSuperCommander);
  55.     window->ConnectToData (inData);
  56.     return window;
  57. }
  58.  
  59. //----------
  60. #define    RegisterClasses(AbstractClass,AMImpClass,GAImpClass)    \
  61.     RegisterClass_(AbstractClass);    \
  62.     if (useAppearance) {    \
  63.         RegisterClassID_(AMImpClass, AbstractClass::imp_class_ID);    \
  64.     } else {    \
  65.         RegisterClassID_(GAImpClass, AbstractClass::imp_class_ID);    \
  66.     }
  67.  
  68. //----------
  69. void    CButtons::RegisterClass ()
  70. {
  71.     Boolean        useAppearance = UEnvironment::HasFeature (env_HasAppearance);
  72.  
  73.     RegisterClass_(CButtons);
  74.  
  75.     // register the pane classes we use
  76.     RegisterClasses (LStaticText, LAMStaticTextImp, LGAStaticTextImp);
  77.     RegisterClass_(CInvisibleButton);
  78.     RegisterClasses (LPushButton, LAMPushButtonImp, LGAPushButtonImp);
  79.     RegisterClasses (LBevelButton, LAMBevelButtonImp, LGABevelButtonImp);
  80.     RegisterClasses (LDisclosureTriangle, LAMControlImp, LGADisclosureTriangleImp);
  81.     RegisterClasses (CPushButton, CustomControlImp, CustomControlImp);
  82.     RegisterClass_(LToggleButton);
  83.     RegisterClasses (LTextGroupBox, LAMControlViewImp, LGATextGroupBoxImp);
  84.     RegisterClass_(LRadioGroupView);
  85.     RegisterClasses (LRadioButton, LAMControlImp, LGARadioButtonImp);
  86.  
  87.     sIsRegistered = true;
  88. }
  89.  
  90. //----------
  91. CButtons::CButtons (
  92.     LStream*    inStream)
  93.     : LWindow (inStream)
  94. {
  95. }
  96.  
  97. //----------
  98. CButtons::~CButtons ()
  99. {
  100. }
  101.  
  102. //----------
  103. //    This member function gets called once the containment hierarchy that contains
  104. //    this pane has been built. It gives us a chance to get data members for
  105. //    interesting subviews, and to do other operations now that our subviews exist.
  106. void    CButtons::FinishCreateSelf ()
  107. {
  108.     mInvisibleButton = (CInvisibleButton*) FindPaneByID ('Inve');
  109.  
  110.     mStandardButton = (LPushButton*) FindPaneByID ('Stad');
  111.  
  112.     mRightIconButton = (LPushButton*) FindPaneByID ('Rign');
  113.  
  114.     mBevelButton = (LBevelButton*) FindPaneByID ('Bevl');
  115.  
  116.     mXxCheck = (LDisclosureTriangle*) FindPaneByID ('Xx  ');
  117.  
  118.     mLightButton = (CPushButton*) FindPaneByID ('Ligt');
  119.  
  120.     mLeftRightCheck = (LToggleButton*) FindPaneByID ('Left');
  121.  
  122.     mRadiosGroup = (LRadioGroupView*) FindPaneByID ('Rads');
  123.  
  124.     mRadioButtonRadio = (LBevelButton*) FindPaneByID ('Radn');
  125.  
  126.     mRadioButton2Radio = (LBevelButton*) FindPaneByID ('Rad2');
  127.  
  128.  
  129.     UReanimator::LinkListenerToControls(this, this, RidL_ButtonsID);
  130.         // "connect" self to our controls that we want to "listen" to
  131.  
  132.     // any additional initialization for your window:
  133. }
  134.  
  135. //----------
  136. void    CButtons::ConnectToData (
  137.     DDocData*        inData)
  138. {
  139.     mData = inData;
  140.     mData->AddListener (this);
  141.  
  142.     mXxCheck->SetValue (mData->GetTriangle ());
  143.     mLeftRightCheck->SetValue (mData->GetLeftRight ());
  144.     mRadiosGroup->SetValue (mData->GetRadios ());
  145. }
  146.  
  147. //----------
  148. void    CButtons::DataChanged (
  149.     long        inDataID)
  150. {
  151.     StopListening ();
  152.  
  153.     if (inDataID == idTriangle) {
  154.         mXxCheck->SetValue (mData->GetTriangle ());
  155.     }
  156.     if (inDataID == idLeftRight) {
  157.         mLeftRightCheck->SetValue (mData->GetLeftRight ());
  158.     }
  159.     if (inDataID == idRadios) {
  160.         mRadiosGroup->SetValue (mData->GetRadios ());
  161.     }
  162.  
  163.     StartListening ();
  164. }
  165.  
  166. //----------
  167. void    CButtons::ListenToMessage (
  168.     MessageT    inMessage,
  169.     void*        ioParam)
  170. {
  171.     switch (inMessage) {
  172.     case msgDataChanged:
  173.             DataChanged ((long)ioParam);
  174.         break;
  175.  
  176.     case msgXx:
  177.             mData->SetTriangle (mXxCheck->GetValue ());
  178.         break;
  179.  
  180.     case msgLeftRight:
  181.             mData->SetLeftRight (mLeftRightCheck->GetValue ());
  182.         break;
  183.  
  184.     default:
  185.           ; // do something
  186.         break;
  187.     }
  188. }
  189.  
  190. //----------
  191. Boolean        CButtons::ObeyCommand (
  192.     CommandT    inCommand,
  193.     void*        ioParam)
  194. {
  195.     Boolean        cmdHandled = true;
  196.  
  197.     if (inCommand < 0) {
  198.         // modal dialog has finished
  199.  
  200.         switch (-inCommand) {
  201.         }
  202.  
  203.     } else {
  204.         switch (inCommand) {
  205.  
  206.         default:
  207.                 cmdHandled = LWindow::ObeyCommand(inCommand, ioParam);
  208.             break;
  209.         }
  210.     }
  211.  
  212.     return cmdHandled;
  213. }
  214.  
  215. //----------
  216. void    CButtons::FindCommandStatus (
  217.     CommandT    inCommand,
  218.     Boolean        &outEnabled,
  219.     Boolean        &outUsesMark,
  220.     Char16        &outMark,
  221.     Str255        outName)
  222. {
  223.     outUsesMark = false;
  224.  
  225.     switch (inCommand) {
  226.  
  227.  
  228.     default:
  229.             LWindow::FindCommandStatus(inCommand, outEnabled,
  230.                                         outUsesMark, outMark, outName);
  231.         break;
  232.     }
  233. }
  234.